package com.itx.gatewayx.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itx.gatewayx.domain.ChatMessage;
import com.itx.gatewayx.domain.ChatSession;

import java.util.List;

/**
 * 聊天服务接口
 *
 * @author itx
 */
public interface ChatService {
    
    /**
     * 获取用户的聊天会话列表
     *
     * @param userId 用户ID
     * @return 会话列表
     */
    List<ChatSession> getUserSessions(Long userId);
    
    /**
     * 获取或创建与指定用户的聊天会话
     *
     * @param userId 用户ID
     * @param targetUserId 目标用户ID
     * @return 会话
     */
    ChatSession getOrCreateSession(Long userId, Long targetUserId);
    
    /**
     * 分页获取聊天记录
     *
     * @param current 当前页
     * @param size 每页大小
     * @param chatId 会话ID
     * @return 聊天记录
     */
    IPage<ChatMessage> getChatMessages(Long current, Long size, Long chatId);
    
    /**
     * 发送消息
     *
     * @param message 消息
     * @return 是否成功
     */
    boolean sendMessage(ChatMessage message);
    
    /**
     * 将消息标记为已读
     *
     * @param chatId 会话ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean markMessagesAsRead(Long chatId, Long userId);
    
    /**
     * 获取未读消息数
     *
     * @param chatId 会话ID
     * @param userId 用户ID
     * @return 未读消息数
     */
    int getUnreadCount(Long chatId, Long userId);
    
    /**
     * 获取用户所有会话的未读消息总数
     *
     * @param userId 用户ID
     * @return 未读消息总数
     */
    int getTotalUnreadCount(Long userId);
} 